package com.cedancp.hometrade;

import java.util.HashMap;

import org.json.JSONException;
import org.json.JSONObject;

import com.google.android.gms.maps.model.LatLng;

import library.UserFunctions;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class DetallePublicacion extends Activity {
	
	String cod_publicacion;
	Button btn_mostrarEnMapa;
	ImageView imgView;
	CheckBox chk_fav;
	ProgressDialog pDialogo;
	TextView txv_titulo;
	TextView txv_tipo;
	TextView txv_finaliza;
	TextView txv_precio;
	TextView txv_descripcion;
	TextView txv_direccion;
	TextView txv_ciudad;
	UserFunctions userFunction=new UserFunctions();
	LatLng ubicacion;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_detalle_publicacion);
		cod_publicacion=getIntent().getExtras().getString("cod_publicacion");
		btn_mostrarEnMapa=(Button) findViewById(R.id.btn_mostrarEnMapa);
		txv_tipo=(TextView) findViewById(R.id.txv_tipo);
		txv_finaliza=(TextView) findViewById(R.id.txv_finaliza);
		txv_titulo=(TextView) findViewById(R.id.txv_titulo);
		txv_precio=(TextView) findViewById(R.id.txv_precio);
		txv_descripcion=(TextView) findViewById(R.id.txv_descripcion);
		txv_direccion=(TextView) findViewById(R.id.txv_direccion);
		txv_ciudad=(TextView) findViewById(R.id.txv_ciudad);
		imgView=(ImageView) findViewById(R.id.imgViewDes);
		chk_fav=(CheckBox) findViewById(R.id.chk_favorito);
		
		
		new getUbi().execute(cod_publicacion);
		new GetPublicacion().execute(cod_publicacion);
		new GetImage().execute(cod_publicacion);
		
		chk_fav.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
			
			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
				if (isChecked) {
					new AddRemFav().execute(true);
				}
				if (!isChecked) {
					new AddRemFav().execute(false);
				}
				
			}
		});
		
		btn_mostrarEnMapa.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				Intent i = new Intent(getApplicationContext(),MostrarMapa.class);
				i.putExtra("cod_publicacion", cod_publicacion);
				i.putExtra("ubicacion", ubicacion);
				i.putExtra("titulo", txv_titulo.getText());
				startActivity(i);
				
			}
		});
	}
	
	
	class GetPublicacion extends AsyncTask<String, String, JSONObject>{
		
		@Override
		public void onPreExecute(){
			super.onPreExecute();
			pDialogo=new ProgressDialog(DetallePublicacion.this);
			pDialogo.setMessage("cargando...");
			pDialogo.setIndeterminate(false);
            pDialogo.setCancelable(false);
            pDialogo.show();
		}

		@Override
		protected JSONObject doInBackground(String... params) {
			String cod_pub=params[0];
			JSONObject json=userFunction.getPub(getApplicationContext(), cod_pub);
			return json;
		}
		
		@Override
		protected void onPostExecute(JSONObject json){
			pDialogo.dismiss();
			String error;
			String mensaje="";
			int duration = Toast.LENGTH_SHORT;
			try {
				error = json.getString("error");
				if((error.compareTo("0"))==0){
					json=json.getJSONObject("publicacion"); 
					if(json.getString("tipo").compareTo("1")==0){
						txv_tipo.setText("Venta");
					}
					else{
						txv_tipo.setText("Arriendo");
					}
					
					if(json.getString("ciudad").compareTo("0")==0){
						txv_ciudad.setText("Quito");
					}
					if(json.getString("ciudad").compareTo("1")==0){
						txv_ciudad.setText("Guayaquil");
					}
					if(json.getString("ciudad").compareTo("2")==0){
						txv_ciudad.setText("Cuenca");
					}
					
					txv_titulo.setText(json.getString("titulo"));
					txv_precio.setText(json.getString("precio"));
					txv_descripcion.setText(json.getString("descripcion"));
					txv_direccion.setText(json.getString("direccion"));
					txv_finaliza.setText("Finaliza el: "+json.getString("fecha_fin"));
					if (json.getString("favorito").compareTo("1")==0) {
						chk_fav.setChecked(true);
					}
					else{
						chk_fav.setChecked(false);
					}
				}
				else{
					mensaje=json.getString("error_msg");		
					Toast toast = Toast.makeText(getApplicationContext(), mensaje, duration);
					toast.show();
				}
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
	}
	
	class GetImage extends AsyncTask<String, String, Bitmap>{

		@Override
		protected Bitmap doInBackground(String... params) {
			String cod_pub=params[0];
			Bitmap bitmap=userFunction.loadImageFromUrl(cod_pub);
			
			return bitmap;
		}
		
		@Override
		protected void onPostExecute(Bitmap bitmap){
			if(bitmap!=null){
				imgView.setImageBitmap(bitmap);
			}
		}
		
		
	}

	class AddRemFav extends AsyncTask<Boolean, String, String>{

	@Override
	protected String doInBackground(Boolean... params) {
		Boolean bandera=params[0];
		String error;
		String mensaje="";
		
		if(bandera){		
			JSONObject json=userFunction.addRemFav(getApplicationContext(), cod_publicacion,"add");
			
			try {
				error=json.getString("error");
				if (error.compareTo("0")==0) {
					mensaje="Agregado a favoritos";
				}
				else{
					mensaje=json.getString("error_msg");
				}
			}catch (JSONException e) {
				e.printStackTrace();
			}
		}
		else{
			JSONObject json=userFunction.addRemFav(getApplicationContext(), cod_publicacion, "rem");
			
			try {
				error=json.getString("error");
				if (error.compareTo("0")==0) {
					mensaje="Removido de favoritos";
				}
				else{
					mensaje=json.getString("error_msg");
				}
			}catch (JSONException e) {
				e.printStackTrace();
			}
		}
		
		return mensaje;
	}
	
	@Override
	protected void onPostExecute(String mensaje){
		Toast.makeText(getApplicationContext(), mensaje, Toast.LENGTH_SHORT).show();
		}
	}
	
	class getUbi extends AsyncTask<String, String, HashMap<String, String>>{

		@Override
		protected HashMap<String, String> doInBackground(String... params) {
			String cod_pub=params[0];
			String error;
			HashMap<String, String> datos=new HashMap<String, String>();
			
			JSONObject json=userFunction.getUbi(cod_pub);
			
			try {
					error=json.getString("error");
					if (error.compareTo("0")==0) {
						datos.put("tag", "1");
						datos.put("latitud", json.getString("latitud"));
						datos.put("longitud", json.getString("longitud"));
						return datos;
					}
					else{
						datos.put("tag", "2");
						return datos;
					}
				}catch (JSONException e) {
					e.printStackTrace();
					return null;
				}
		}
		
		@Override
		protected void onPostExecute(HashMap<String, String> datos){
			if (datos.get("tag").compareTo("1")==0) {
				btn_mostrarEnMapa.setEnabled(true);
				ubicacion=new LatLng(Double.parseDouble(datos.get("latitud")), Double.parseDouble(datos.get("longitud")));
			}
			else{
				btn_mostrarEnMapa.setEnabled(false);
			}
			
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.detalle_publicacion, menu);
		return true;
	}
	
	//Creando los eventos de las opciones de menu
	@Override
    public boolean onOptionsItemSelected(MenuItem item){
		UserFunctions userFunction= new UserFunctions();
    	switch (item.getItemId()) {
		case R.id.mnu_salir:
			if(userFunction.logoutUser(getApplicationContext())){
				Intent mainActivity=new Intent(getApplicationContext(), MainActivity.class);
				mainActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
				startActivity(mainActivity);
			}
			
			return true;
			
		case R.id.mnu_cuenta:
				Intent iCuenta =new Intent(getApplicationContext(), AdministrarCuenta.class);
				startActivity(iCuenta);
				return true;
				
		case R.id.acercaDe:
			Intent iAcercaDe = new Intent(getApplicationContext(), AcercaDe.class);
			startActivity(iAcercaDe);
			return true;
			
		case R.id.mnu_publicar:
			Intent intent =new Intent(getApplicationContext(), AddPublicacion.class);
			startActivity(intent);
			return true;
		
		case R.id.mnu_busqueda:
			Intent iBuscar =new Intent(getApplicationContext(), BuscarPub.class);
			startActivity(iBuscar);
			return true;

		default:
			return super.onOptionsItemSelected(item);
		}
    }

}
